﻿using System.Reflection.PortableExecutable;
using System.Xml.Linq;

namespace HanoiTowerGame
{
    /// <summary>
    /// 汉诺塔游戏
    /// </summary>
    /// <param name="n"></param>
    /// <param name="A"></param>
    /// <param name="B"></param>
    /// <param name="C"></param>
    internal class Program
    {
        //在main函数前定义声明Hanoi函数，n表示有n个盘子，A,B,C表示塔A,B,C
        public static void HanoiGame(int n, char A, char B, char C)
        {
            //当盘子不止一层时，走以下if循环。。
            if(n!=1)
            {
                //递归调用函数Hanoi
                //将n-1层从塔A经过塔C移动到塔B
                HanoiGame(n - 1, A, C, B);
                //将第n层（最底下最大的盘子）从塔A移动到塔C
                Console.WriteLine($"将第{n}个盘子从塔{A}移动到塔{C}");
                //将n-1层从塔B经塔A移动到塔C
                HanoiGame(n - 1, B, A, C);
            }
            //当只有一层盘子时，直接将盘子从塔A移到塔C即可
            else 
                Console.WriteLine($"将第{n}个盘子从塔{A}移动到塔{C}");
        }
        static void Main(string[] args)
        {
            //输入盘子层数
            Console.WriteLine("Please enter the number of plates:");
            //将用户输入的盘子数量用Convert转换为int类型
            int num = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine($"The number of plates you enter is: {num}");
            //在main函数里调用函数Hanoi
            HanoiGame(num, 'A', 'B', 'C');
        }
    }
}